# -*- coding:utf-8 -*-

__author__ = 'zhl'
"""
专题报表-龙虎榜-营业部买卖交易统计表
"""
from EmQuantAPI import *
from datetime import timedelta, datetime
import time as _time
import traceback
import pandas as pd

"""
创建Pandas DataFrame 数据结构
label=list()
dict={0:[],1:[]}
"""


def dict_convert_dataframe_append_toscv(file,dict,label,df):
   
    for k,v in dict.items():
        data = [v]  
        df = df.append(pd.DataFrame(data,index=[k],columns=label))
        df.to_csv(file,mode="a",header=False)
    return df

def dict_convert_dataframe(dict,label,df):
   
    for k,v in dict.items():
        data = [v]  
        df = df.append(pd.DataFrame(data,index=[k],columns=label))
    return df

def mainCallback(quantdata):
    """
    mainCallback 是主回调函数，可捕捉如下错误
    在start函数第三个参数位传入，该函数只有一个为c.EmQuantData类型的参数quantdata
    :param quantdata:c.EmQuantData
    :return:
    """
    print("mainCallback", str(quantdata))
    # 登录掉线或者 登陆数达到上线（即登录被踢下线） 这时所有的服务都会停止
    if str(quantdata.ErrorCode) == "10001011" or str(quantdata.ErrorCode) == "10001009":
        print("Your account is disconnect. You can force login automatically here if you need.")
    # 行情登录验证失败（每次连接行情服务器时需要登录验证）或者行情流量验证失败时，会取消所有订阅，用户需根据具体情况处理
    elif str(quantdata.ErrorCode) == "10001021" or str(quantdata.ErrorCode) == "10001022":
        print("Your all csq subscribe have stopped.")
    # 行情服务器断线自动重连连续6次失败（1分钟左右）不过重连尝试还会继续进行直到成功为止，遇到这种情况需要确认两边的网络状况
    elif str(quantdata.ErrorCode) == "10002009":
        print("Your all csq subscribe have stopped, reconnect 6 times fail.")
        # 行情订阅遇到一些错误(这些错误会导致重连，错误原因通过日志输出，统一转换成EQERR_QUOTE_RECONNECT在这里通知)，正自动重连并重新订阅,可以做个监控
    elif str(quantdata.ErrorCode) == "10002012":
        print("csq subscribe break on some error, reconnect and request automatically.")
        # 资讯服务器断线自动重连连续6次失败（1分钟左右）不过重连尝试还会继续进行直到成功为止，遇到这种情况需要确认两边的网络状况
    elif str(quantdata.ErrorCode) == "10002014":
        print("Your all cnq subscribe have stopped, reconnect 6 times fail.")
    # 资讯订阅遇到一些错误(这些错误会导致重连，错误原因通过日志输出，统一转换成EQERR_INFO_RECONNECT在这里通知)，正自动重连并重新订阅,可以做个监控
    elif str(quantdata.ErrorCode) == "10002013":
        print("cnq subscribe break on some error, reconnect and request automatically.")
    # 资讯登录验证失败（每次连接资讯服务器时需要登录验证）或者资讯流量验证失败时，会取消所有订阅，用户需根据具体情况处理
    elif str(quantdata.ErrorCode) == "10001024" or str(quantdata.ErrorCode) == "10001025":
        print("Your all cnq subscribe have stopped.")
    else:
        pass


def startCallback(message):
    print("[EmQuantAPI Python]", message)
    return 1


try:
    # 调用登录函数（激活后使用，不需要用户名密码）
    loginResult = c.start("ForceLogin=1", '', mainCallback)
    if(loginResult.ErrorCode != 0):
        print("login in fail")
        exit()
    print(" 获取专题报表-龙虎榜-营业部买卖交易统计-2021年3月9日")
  
   
    startDate="2021-04-28"
    endDate="2021-04-28"
    limit_="100000"
    saleType="2"
    file_prefix="winner_list_dept_statis"
    options="StartDate="+startDate+",EndDate="+endDate+",Limit="+limit_+",SalesType="+saleType
    
    
        # 2021-03-09 21:44:11
    # 该表主要提供了指定日期区间内各营业部参与异动股票交易的汇总信息(次数、成交额等) 参数: 起始日期 截止日期 前N条 营业部类型代码 字段: 营业部代码 营业部名称 营业部类型代码 营业部类型中文 上榜次数 买入次数 买入金额合计 成功率 卖出次数 卖出金额合计 营业部实力排名 营业部成交总额 每次操作动用资金均值 单次成交最高金额 偏好个股 偏好题材 总上榜次数
    data_res=c.ctr("SaleStatisticInfo","salescode,salesname,salestype,salestypename,count,bcount,bmoney,successrate,scount,smoney,salesrank,totalmoney,avgmoney,highest,likestocks,liketype,allcount"
                ,options)
    if(data_res.ErrorCode != 0):
        print("request ctr Error, ", data_res.ErrorMsg)
    else:
        print("ctr龙虎榜-营业部买卖交易统计输出结果======分割线======")
        # print(data_res.Codes)
        # print()
        # print(data_res.Dates)
        # print()
        # print(data_res.Indicators )
        # print()
        # print(data_res.Data)
        # for key,value in data_res.Data.items():
        #     print()
        #     print(value)
            # for v in value:
                #  print(v, " ", end="")
            # print()
        # 创建 DataFrame 结构数据
        label=data_res.Indicators
        # df=pd.DataFrame(columns=label)
        file=file_prefix+"-"+startDate+"_"+endDate+".csv"
        # df.to_csv(file)

        # pd_data=dict_convert_dataframe_append_toscv(file,data_res.Data,label,df)
        df2=pd.DataFrame()
        pd_data2=dict_convert_dataframe(data_res.Data,label,df2)
        pd_data2.to_csv(file)
        


except Exception as ee:
    print("error >>>", ee)
    traceback.print_exc()
else:
    print("获取专题报表-龙虎榜-营业部买卖交易统计表-end")

finally:
    # 退出
    data_shareholder = logoutResult = c.stop()
